iT邦幫忙

2023 iThome 鐵人賽

DAY 2
1
Modern Web

那些你可能要知道的前端知識系列 第 2

【day2】(JavaScript) ==、=== 的區別

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20230905/20148303yZcpN5fOWy.png

剛開始接觸JavaScript時,很常會遇到 == 或 === 來判斷兩邊的值是否相等,但是「兩個」等號和「三個」等號,常常讓我們感到困惑,以下來詳細說明它們差異是什麼!


先上一段程式碼

let a = 1
let b = 2

console.log(a == b) // 輸出 false
console.log(a == 1) // 輸出 true
console.log(b == 2) // 輸出 true

a 不等於 b 很正確,這個部分我們一定沒有問題~

再附上另一段程式碼

let a = 1
let b = '1'

console.log(a == b) // 輸出 true

為什麼數字1會等於字串1(?)
原因就是「兩個等號」JavaScript會做「自動轉型」,因此新增了「三個等號」來執行嚴格檢查

let a = 1
let b = '1'

console.log(a === b) // 輸出 false

使用「三個等號」來進行嚴格檢查,因為數字1不等於字串1,所以判定會是false


有了前面的範例,接下來說明這兩種比較運算子的定義吧!

== 鬆散比較 (loose equality)

當等號兩邊的資料類型不同時,會進行「自動轉型」。

JavaScript是如何進行自動轉型的呢?

  • 其中有一個值是boolean時,true會轉型成「數字1」、false會轉型成「數字0」
console.log(true == 1) // 輸出 true

console.log(flase == 0) // 輸出 false
  • 遇到字串與數字比較時,會先將字串透過Number()轉型為數字後,再進行比較
console.log(3 == '3') // 輸出 true

=== 嚴格比較 (strict equality)

「三個等於」和「兩個等於」都是比較的意思,兩者都會做「型別檢查」,但是三個等於不會做「自動轉型」。
===嚴格比較只有在「數值」與「型別」都相同的情況下才會回傳true。

console.log(true === 1) // 輸出 false

console.log(false === 0) // 輸出 false

console.log(3 === '3') // 輸出 false

容易混淆的null與undefined

再來説説令人頭痛的null,undefined 🥺
* null == undefined 會判定為 true , 但使用 === 嚴格比較,會判定是false

為什們使用 == 判斷會是true?
undefined代表的是尚未被賦予值,null代表是空值或是沒有,因此在 == 比較時,Javascript會嘗試將兩者進行型別自動轉換,使兩種值相等。

為什麼使用 === 會是false?
使用===嚴格比較時,「數值」和「型別」都要相同才會回傳true
null的型別是object,undefined的型別是undefined,兩者型別不一樣,所以是flase

結論

最後,無論選擇哪種比較運算符,最重要的是明確知道它的行為和結果。最最最後還是會建議使用 === 是一個更好的選擇~


上一篇
【day1】var、let、const 的差別
下一篇
【day3】(JavaScript) 作用域 Scope
系列文
那些你可能要知道的前端知識30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言